perm filename FILLER.F4[IRC,LCS] blob sn#496781 filedate 1980-02-02 generic text, type T, neo UTF8
****** FILLER, HGHT, MISS, HALF ********
C  Q AND R  ARE X,Y COORDS.  NE(1)=WDCNT. OTHER NE'S HAVE 3
C   FOR INVIS. VECTORS.   M=VERTICAL SCAN LINES
	SUBROUTINE FILLER(Q,R,NE,M)
	DIMENSION Q(1),R(1),NE(1)
	KK=NE(1)
	KJ=2
	DO 4 K=2,KK
	IF(NE(K).NE.3)GO TO 11
	NE(K)=-1
	KJ=K+1
	GO TO 4
11	NE(K)=0
4	CONTINUE
	RLFT=10000
	RT=-10000
	B=RT
	DO 12 K=1,KK
	H=IFIX(Q(K))
	IF(H.LT.RLFT)RLFT=H
C  FINDS LEFT AND RIGHT LIMITS.
	IF(H.GT.RT)RT=H
	IF(H.EQ.B)NE(K)=-1
C FINDS VERTICAL LINES.
	B=H
	Q(K)=H
12	R(K)=IFIX(R(K))
	NE(KK+1)=-1
C  FINDS JUMPS
	LRT=RT
	JA=3

124	LEFT=RLFT
51	J=LEFT
42	RJ=J+.001
	JCONT=0
	LEFT=J

C  NEXT LOOKS TO SEE IF 'ALT' IS HIGHEST AVAILABLE POINT.
	JJ=-1
	ALT=-10000.
200	DO 45 L=2,KK
	IF(NE(L).NE.0)GO TO 45
C  PASSES ANY LINE THAT HAS BEEN USED FOR ↑ OR ↓ SO FAR.
C NE=-1 ↓;  =1 ↑;  
	IF(MISS(L,RJ,Q))GO TO 45
C  FINDS HIGHEST UNUSED LINE UNDER J
	H=HGHT(L,RJ,Q,R)
	IF(H.LT.ALT)GO TO 45
	ALT=H
	JJ=L
45	CONTINUE
	IF(JJ)GO TO 43
C  DID NOT FIND A NEW LINE TO USE.
	JCONT=-1
	LEFT=J

46	JA=3
	JORD=-1
52	KN=Q(JJ)
	KL=Q(JJ-1)
	IF(KN.LT.KL)KN=KL
50	I=J
102	RJ=I+.01
	ALT=HGHT(JJ,RJ,Q,R)
C  MAKE I,M,J,LEFT ETC. FLOATING PT.
C  NEXT FINDS HIGHEST POINT TO DRAW TO.
	B=-10000
	JK=-1
	XALT=ALT+.001
	ZALT=ALT
400	DO 47 L=2,KK
	IF(L.EQ.JJ.OR.MISS(L,RJ,Q).OR.NE(L).LT.0)GO TO 47
	H=HGHT(L,RJ,Q,R)
	IF(H.GT.XALT)GO TO 47
	IF(H.LE.B)GO TO 47
	B=H
C  FINDS HIGHEST POINT.
	JK=L
47	CONTINUE
	IF(JK)GO TO 48
	ALT=ALT-1
300	IF(ZALT-B.GT..001.OR.I.NE.J)GO TO 59
	JX=Q(JK)
	IF(JX.GT.KN)GO TO 60
	JX=Q(JK-1)
	IF(JX.LT.KN)GO TO 59
60	L=JJ
	JJ=JK
	JK=L
	KN=JX
C REVERSES ROLE OF LINES IF 2ND IS LONGER.
59	B=B+1
	IF(JORD)GO TO 103
	H=B
	B=ALT
	ALT=H
	IF(JK.NE.NK.AND.ABS(ALT-B).GT.5.)JA=3
103	CALL LINES(RJ,ALT,JA)
100	CALL LINES(RJ,B,2)
	NK=JK
C  FOR CHANGES AT END POINTS OF LINES.
	JORD=-JORD
C JORD IS TO AVOID DIAGONAL LINES IN FILLER.
	NE(JK)=1
	NE(JJ)=-1
	JA=2
	I=I+M
	IF(I.LT.KN)GO TO 102

	L=1
	IF(KN.EQ.KL)L=-1
	JJ=JJ+L
	J=0
	IF(L)J=-1
C  FIGURES OUT DIRECTION OF NEXT LINE SEG.
	IF(KN+M.GT.Q(JJ+J).OR.JJ.GT.KK.OR.NE(JJ).NE.0)GO TO 124
	J=I
	GO TO 52
48	JA=3
43	J=LEFT+M
C  M IS SET IN FILLMS
	IF(J.LE.LRT)GO TO 42
	IF(JCONT)GO TO 51
C  GOES BACK TO LOOK FOR MORE.
	END

	FUNCTION HGHT(J,A,Q,R)
	DIMENSION Q(1),R(1)
	B=R(J-1)
	D=Q(J-1)
	F=Q(J)
	HGHT=((R(J)-B)*(A-D))/(F-D)+B
	IF(F.EQ.D)HGHT=B
	END

	FUNCTION MISS(J,A,Q)
	DIMENSION Q(1)
	B=Q(J)
	C=Q(J-1)
	MISS=-1
	IF((A.LT.C.AND.A.GT.B).OR.(A.LT.B.AND.A.GT.C))MISS=0
	END
C  MISS=-1, HIT=0